package com.shtel.bss.saas.core.base.exception;


import com.alibaba.fastjson.JSON;

/**
 * 异常构建器
 * @author xiezhiwei
 * @version Revision 1.0
 * @版权： 版权所有 (c) 2018
 * @创建日期： 2018/12/10 16:06
 * @功能说明：
 */
public class ExceptionBuilder {

	private ExceptionBuilder() {
	}


	/**
	 * 参数检验异常
	 * @param errorCode
	 * @param obj
	 * @return
	 */
	public static BaseException paramsException(ExceptionCode errorCode, Object... obj) {
		String msg = "";
		if (errorCode.isEmbedMsg()) {
			msg = String.format(errorCode.getMsg(), obj);
		} else {
			msg = errorCode.getMsg() + JSON.toJSONString(obj);
		}
		return new ParamException(errorCode.getCode(),msg);
	}


	/**
	 * 业务异常，http状态码为400，此类异常不触发服务熔断机制
	 * @param errorCode
	 * @param obj
	 * @return BusiException
	 * @author xiezhw
	 * @date 2018/12/10
	 */
	public static BaseException BusiException(ExceptionCode errorCode, Object... obj) {
		String msg = "";
		if (errorCode.isEmbedMsg()) {
			msg = String.format(errorCode.getMsg(), obj);
		} else {
			msg = errorCode.getMsg() + JSON.toJSONString(obj);
		}
		return new BaseException(errorCode.getCode(),msg);
	}

	/**
	 * 系统异常，http状态码为500，此类异常将触发服务熔断机制
	 * @param errorCode
	 * @param obj
	 * @return BusiException
	 * @author xiezhw
	 * @date 2018/12/10
	 */
	public static BaseException BaseException(ExceptionCode errorCode, Object... obj) {
		String msg = "";
		if (errorCode.isEmbedMsg()) {
			msg = String.format(errorCode.getMsg(), obj);
		} else {
			msg = errorCode.getMsg() + JSON.toJSONString(obj);
		}
		return new BaseException(errorCode.getCode(),msg);
	}

	public static BaseException BaseException(String errorCode, String msg) {
		return new BaseException(errorCode , msg);
	}

	public static void throwBusiException(ExceptionCode errorCode, Object... obj) {
		throw BusiException(errorCode,obj);
	}

	public static void throwBaseException(ExceptionCode errorCode, Object... obj) {
		throw BaseException(errorCode,obj);
	}
}
